/******************************************************************************
----------------本例程仅供学习使用，未经作者允许，不得用于其他用途。-----------
------------------------版权所有，仿冒必究！-----------------------------------
----------------1.开发环境:Arduino IDE-----------------------------------------
----------------2.测试使用开发板型号：Arduino Leonardo or Arduino UNO R3-------
----------------3.单片机使用晶振：16M------------------------------------------
----------------4.淘宝网址：Ilovemcu.taobao.com--------------------------------
----------------------------epic-mcu.taobao.com--------------------------------
----------------5.作者：神秘藏宝室---------------------------------------------
******************************************************************************/
#define LED_R 2
#define LED_G 3
#define LED_B 4

#define KEY 5

unsigned char KEY_NUM = 0;
unsigned char Color_Value = 0;

enum{Color_R,Color_G,Color_B,Color_RG,Color_RB,Color_GB,Color_RGB};			//枚举所有颜色
//红，绿，蓝，黄，紫，青，白

void setup()
{
	pinMode(LED_R,OUTPUT);
	pinMode(LED_G,OUTPUT);
	pinMode(LED_B,OUTPUT);
	pinMode(KEY,INPUT_PULLUP);
   Change_Color(Color_RGB);		//初始化颜色为白色
}

void loop()
{
	Scan_KEY();					//按键扫描
	if(KEY_NUM == 1)				//按键执行程序
	{
		KEY_NUM = 0;				//清空标志位
		
		Change_Color(Color_Value);		//切换颜色
		Color_Value++;				//颜色变量+1
		if(Color_Value == Color_RGB+1)		//当颜色变量 == 7
		{
			Color_Value = Color_R;		//颜色变量清零
		}
	}
}

void Change_Color(unsigned char data_color)		//选择颜色函数
{
	switch(data_color)
	{
		case Color_R:							//红色
			digitalWrite(LED_R,LOW);
			digitalWrite(LED_G,HIGH);
			digitalWrite(LED_B,HIGH);
			break;
		case Color_G:							//绿色
			digitalWrite(LED_R,HIGH);
			digitalWrite(LED_G,LOW);
			digitalWrite(LED_B,HIGH);
			break;
		case Color_B:							//蓝色
			digitalWrite(LED_R,HIGH);
			digitalWrite(LED_G,HIGH);
			digitalWrite(LED_B,LOW);
			break;
		case Color_RG:							//黄色
			digitalWrite(LED_R,LOW);
			digitalWrite(LED_G,LOW);
			digitalWrite(LED_B,HIGH);
			break;
		case Color_RB:							//紫色
			digitalWrite(LED_R,LOW);
			digitalWrite(LED_G,HIGH);
			digitalWrite(LED_B,LOW);
			break;
		case Color_GB:							//青色
			digitalWrite(LED_R,HIGH);
			digitalWrite(LED_G,LOW);
			digitalWrite(LED_B,LOW);
			break;
		case Color_RGB:							//白色
			digitalWrite(LED_R,LOW);
			digitalWrite(LED_G,LOW);
			digitalWrite(LED_B,LOW);
			break;
		default:
			break;

	}

}

void Scan_KEY()						//按键扫描
{
	if( digitalRead(KEY) == 0 )		//查看按键是否按下	
	{
		delay(20);					//延时20ms，去抖动	
		if( digitalRead(KEY) == 0 ) //查看按键是否按下
		{
			KEY_NUM = 1;			
			while(digitalRead(KEY) == 0);		//松手检测
		}

	}
}
